/**
 * 月度计划-日期时间工具类
 *
 * created by wuyp on 2019-05-10 16:03:57.
 */
import Vue from 'vue'

/**
 * 日期比较函数
 * @param {String} str1 日期1
 * @param {String} str2 日期2
 * @return {Number} 日期比较结果
 *     1： str1 > str2
 *     0:  str1 = str2
 *    -1:  str1 < str2
 */
export function compareDate (str1, str2) {
  if (new Date(str1).valueOf() > new Date(str2).valueOf()) {
    return 1
  } else if (new Date(str1).valueOf() < new Date(str2).valueOf()) {
    return -1
  } else if (new Date(str1).valueOf() === new Date(str2).valueOf()) {
    return 0
  }
}

/**
 * 获取当前日期，格式YYYY-MM-DD
 * @return {String} 格式化后的当前日期
 */
export function getNowFormatDate () {
  var date = new Date()
  var sep = '-'
  var year = date.getFullYear()
  var month = date.getMonth() + 1
  var strDate = date.getDate()
  if (month >= 1 && month <= 9) {
    month = '0' + month
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = '0' + strDate
  }
  var currentdate = year + sep + month + sep + strDate
  return currentdate
}

/**
 * 格式化日期为yyyy-MM-dd
 * @param {Date} date 时区格式的日期
 * @return {String} 格式化后的日期
 */
export function formatDate (date) {
  var sep = '-'
  var year = date.getFullYear()
  var month = date.getMonth() + 1
  var strDate = date.getDate()
  if (month >= 1 && month <= 9) {
    month = '0' + month
  }
  if (strDate >= 0 && strDate <= 9) {
    strDate = '0' + strDate
  }
  var formatdate = year + sep + month + sep + strDate
  return formatdate
}

/**
 * 计算日期相差天数
 * @param {String} str1 日期1
 * @param {String} str2 日期2
 * @return {Number} 日期相差天数
 */
export function computeDateDiff (str1, str2) {
  let d1 = new Date(str1).valueOf()
  let d2 = new Date(str2).valueOf()
  return parseInt(Math.abs(d2 - d1) / (1000 * 60 * 60 * 24))
}

/**
 * 获取日期的月份
 * @param {String} dateStr 日期：‘yyyy-MM-dd’
 * @return {Number} 月份
 */
export function getFormatMonth (dateStr) {
  return (dateStr && dateStr !== '') ? (new Date(dateStr).getMonth() + 1) : null
}

/**
 * 获取日期的年份
 * @param {String} dateStr 日期：‘yyyy-MM-dd’
 * @return {Number} 年份
 */
export function getFormatYear (dateStr) {
  return (dateStr && dateStr !== '') ? (new Date(dateStr).getFullYear()) : null
}

/**
 * 是否处于相同月份
 * @param {String} date1 日期1
 * @param {String} date2 日期2
 * @return {Boolean} 是否处于相同月份
 */
export function isCommonMonth (date1, date2) {
  let isInOneYear = isCommonYear(date1, date2)
  if (!isInOneYear) {
    return false
  }
  let m1 = getFormatMonth(date1)
  let m2 = getFormatMonth(date2)
  // return (isInOneYear && m1 && m2 && m1 === m2) ? true : false
  return (isInOneYear && m1 && m2 && m1 === m2)
}

/**
 * 是否处于相同季度
 *  1~3;4~6;7~9;10~12
 * @param {String} date1 日期1
 * @param {String} date2 日期2
 * @return {Boolean} 是否处于相同季度
 */
export function isCommonQuarter (date1, date2) {
  let isInOneYear = isCommonYear(date1, date2)
  if (!isInOneYear) {
    return false
  }
  let isTrue = false
  let m1 = getFormatMonth(date1)
  let m2 = getFormatMonth(date2)
  if (m1 && m2) {
    switch (m1) {
      case 1:
      case 2:
      case 3 : {
        if (m2 === 1 || m2 === 2 || m2 === 3) { isTrue = true }
        break
      }
      case 4:
      case 5:
      case 6 : {
        if (m2 === 4 || m2 === 5 || m2 === 6) { isTrue = true }
        break
      }
      case 7:
      case 8:
      case 9 : {
        if (m2 === 7 || m2 === 8 || m2 === 9) { isTrue = true }
        break
      }
      case 10:
      case 11:
      case 12 : {
        if (m2 === 10 || m2 === 11 || m2 === 12) { isTrue = true }
        break
      }
      default: break
    }
  }
  return isTrue
}

/**
 * 是否处于相同年份
 * @param {String} date1 日期1
 * @param {String} date2 日期2
 * @return {Boolean} 是否处于相同年份
 */
export function isCommonYear (date1, date2) {
  let y1 = getFormatYear(date1)
  let y2 = getFormatYear(date2)
  // return (y1 && y2 && y1 === y2) ? true : false
  return (y1 && y2 && y1 === y2)
}

/**
 * 获取date+count天之后的日期(并格式化为 yyyy-MM-dd)
 * @param {String} date 日期
 * @param {String} offset 偏移天数（正整数：往后，负整数：往前）
 * @return {*} 计算结果
 */
export function getFormatDateBeforeOrAfter (date, offset) {
  if (Vue.prototype.UtilJs.isEmpty(date)) {
    return date
  }
  date = new Date(date)
  date.setDate(date.getDate() + offset)
  let month = (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
  let day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
  return date.getFullYear() + '-' + month + '-' + day
}

/**
 * 获取date+count天之后的日期(返回时间戳)
 * @param {String} date 日期
 * @param {String} offset 偏移天数（正整数：往后，负整数：往前）
 * @return {*} 计算结果
 */
export function getDateBeforeOrAfter (date, offset) {
  if (Vue.prototype.UtilJs.isEmpty(date)) {
    return date
  }
  date = new Date(date)
  return date.setDate(date.getDate() + offset)
}
